package com.lsl.builder_pattern;

/**
 * 使用Builder类中声明的方法来编写文档
 * Director类中构造函数的参数为 Builder类型
 * 但是实际上我们并不会将Builder类的实例作为参数传给Director类，因为Builder类是抽象类，无法生成实例。
 * 实际上作为参数传给Director类的是Builder类的子类
 * Builder类的子类决定了编写出的文档形式
 * <p>
 * 为了确保不论ConcreteBuilder角色如何被定义，Director角色都能正常工作，它只调用在Builder角色中被定义的方法
 *
 * @author Zed
 * @description
 * @date 2022/11/27 13:25
 */
public class Director {
    private Builder builder;

    public Director(Builder builder) {
        this.builder = builder;
    }

    public void construct() {
        builder.makeTitle("Greeting");
        builder.makeString("从早上至上午");
        builder.makeItems(new String[]{
                "早上好",
                "下午好"
        });
        builder.makeString("晚上");
        builder.makeItems(new String[]{
                "晚上好",
                "晚安",
                "再见"
        });
        builder.close();
    }
}
